package com.ssau.expert.app;

import com.ssau.expert.common.InputParameters;
import com.ssau.expert.entity.Ship;
import com.ssau.expert.entity.ShipProfile;
import com.ssau.expert.exception.ShipMergeException;

import java.util.List;

/**
 * Author: Sergey Saiyan
 * Created: 05.09.13 13:45
 */
public interface DatabaseAPI {

    void init();

    void flush();

    /**
     * Список кораблей. Класс корабль доступен на GUI
     *
     * @return
     */
    List<Ship> getShips();

    /**
     * Список профилей кораблей. По идее можно получить такой же
     * через ShipProfile.getValues()
     *
     * @return
     */
    List<ShipProfile> getShipProfiles();

    /**
     * Список правил экспертной системы. Строки. Т.е. только
     * для отображения где нибудь.
     *
     * @return
     */
    List<String> getRules();

    /**
     * Обновляет корабль в базе данных.
     *
     * @param ship   Корабль
     * @param params Параметры автономности, штата и их CF
     * @throws ShipMergeException, если коэффициенты уверенности меньше 0, в сумме дают больш 100 и тп.
     */
    void mergeShip(Ship ship, InputParameters params) throws ShipMergeException;
}
